Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

155
Views
TypeScript Type Izar problema de "huevo o gallina"

Antes de que alguien marque esto como duplicado, revisé otras 2 preguntas que en realidad no resolvieron nada. Eran solo ideas para formas alternativas de resolver el problema exacto, pero no mostraban una solución a mi problema.

Al hacer una matriz en TypeScript, le asigné el tipo any[] , ya que aún no he importado el tipo de matriz. Sin embargo, tengo que pasar esta matriz a una declaración require para que los métodos de clase funcionen en esta matriz en particular.

Si hago la matriz primero (usando any[] ), entonces no podré escribir la matriz.

 let blockchain: any[] = []; // Pass array to import classes and functions const {/* stuff to import */} = require("./otherfile.js")(blockchain); type BlockType = InstanceType<typeof Block>; // How do I set blockchain's type to BlockType[]?

Sin embargo, si importo las clases primero, no podré pasar la matriz para dar la matriz correcta a los métodos de clase.

 // Pass array to import classes and functions const {/* stuff to import */} = require("./otherfile.js")(blockchain); // error type BlockType = InstanceType<typeof Block>; let blockchain: BlockType[] = [];

Importar el módulo dos veces, primero con una matriz vacía solo para obtener la clase, no es una opción para mí, ya que los métodos de clase de la importación original enviarán datos a la matriz vacía y no tendrá sentido.

EDITAR: para ser más específicos sobre las clases de módulos, esto es lo que sucede dentro del otro archivo.

 function exp(blockchain: any[]): Object { class Block { // public x: number, etc... constructor( // stuff... } static generate(/* params */): Block { // do stuff, edit properties... let block = new Block(/* args */); blockchain.push(block); // Array that was passed to module return block; } } return { Block: Block } }

La sugerencia de Scotty Jamison no funcionaría aquí porque la clase Block de la importación n.° 1 no sería la misma que la de la importación n.° 2, y sus métodos impulsarían matrices diferentes.

 let {Block1} = require("./otherfile.js")([]); let blockchain: Block1[] = []; let {Block2} = require("./otherfile.js")(blockchain); Block1.generate("yo"); Block2.generate("foobar"); console.log(blockchain.length); // 1
about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!